/**
 * redis操作类
 *  需要在程序启动之后调用RedisTool.initConfig()方法先初始化redis连接
 * */
import configuration from "src/config/configuration";
import Ioredis from "ioredis";

export class RedisTool {

  // 链接实例
  static redisCache = null;

  // 初始化
  static initConfig(){
    // 通过实例化Ioredis来初始化Redis
    RedisTool.redisCache = new Ioredis({
      port: configuration().REDIS.port,
      host: configuration().REDIS.host,
      password: configuration().REDIS.password,
      db: configuration().REDIS.db,
    });
  }

  // 设置缓存
  static async set({ key, value, ttl = 60 * 5, type = "EX" }){
    return await RedisTool.redisCache.set(key, value, type, ttl);
  }

  // 获取缓存
  static async get(key: string) {
    return await RedisTool.redisCache.get(key);
  }

  // 删除缓存
  static async del(key: string) {
    return await RedisTool.redisCache.del(key);
  }

  /**
   * 设置邮箱验证码
   * @param {EmailCodeType} type - 邮箱验证码类型
   * @param {string} email - 要接收的邮箱
   * @param {string} code - 验证码
   * */
  static async setEmilCode(type:EmailCodeType,email:string,code:string){
    await RedisTool.set({
      key:`email:${type}:${email}`,
      value:code
    })
  }
}

// 邮箱验证码类型
export type EmailCodeType = string;